package lib

import (
	"regexp"
	"time"
	"unicode"

	"go-share/logging"
)

// 姓名是否合法
func IsNameOk(name string) bool {

	// 是否为汉字
	for _, r := range name {
		if !unicode.Is(unicode.Scripts["Han"], r) {
			return false
		}
	}

	// 长度2-7
	if len([]rune(name)) < 2 || len([]rune(name)) > 7 {
		return false
	}

	return true
}

// 身份证号是否合法
func IsIdentityCardNoOk(cardNo string) bool {

	if len(cardNo) != 18 {
		return false
	}

	// 前17位为数字，最后一位为数字、”x“、“X”
	reg, err := regexp.Compile(`^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$`)
	if err != nil {
		logging.Debug("Regexp Compile | %v", err)
		return false
	}
	return reg.MatchString(cardNo)
}

// 计算年龄
func CalcAge(cardNo string) int {
	birthday := cardNo[6:14]
	bTime, err := time.Parse("20060102", birthday)
	if err != nil {
		logging.Error("Parse Birthday Err | %v %v", err, birthday)
		return 0
	}
	bYear := bTime.Year()
	bMonth := bTime.Month()
	bDay := bTime.Day()

	// 年龄
	var age int
	age = time.Now().Year() - bYear - 1
	if time.Now().Month() > bMonth {
		age += 1
	} else if time.Now().Month() == bMonth {
		if time.Now().Day() > bDay {
			age += 1
		}
	}

	return age
}
